home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_200 / 275_02 / rijn31.c < prev    next >
Encoding:
C/C++ Source or Header  |  1980-01-01  |  27.8 KB  |  947 lines

  1.  
  2. /* rijn31.c                        */
  3. /* program for LCA31 option 'd'                */
  4. /* display de Bruijn diagram - 1st, 2nd, & 3rd gen    */
  5. /* Harold V. McIntosh, 20 February 1988            */
  6. /* 21 February 1988 - add j0=i0; to Pass 4's [HVM]    */
  7.  
  8. /*    Copyright (C) 1987        */
  9. /*    Copyright (C) 1988        */
  10. /*    Harold V. McIntosh        */
  11. /*    Gerardo Cisneros S.        */
  12.  
  13. # define JX   0.8  /* x-center, de Bruijn diagram    */
  14. # define JY   0.5  /* y-center, de Bruijn diagram    */
  15. # define RI 0.455  /* inner radius, de Bruijn diagram    */
  16. # define RO 0.475  /* outer radius, de Bruijn diagram    */
  17. # define NW    24  /* pause after so many lines        */
  18.  
  19. int  dd;        /* # points in de Bruijn ring    */
  20. int  mc, nc, nl;    /* column & line control    */
  21.  
  22. /* edit the de Bruijn diagram */
  23. edijn() {char c;
  24.  
  25.   clijn();
  26.   dd=KK*KK;
  27.   ijn(dd,KK,2);
  28.   while (0<1) {
  29.   videocursor(0,0,36);
  30.   videoputc('?',2);
  31.   c=kbdin();
  32.   if (c=='\015') break;
  33.   videocursor(0,0,38);
  34.   videoputc(c,2);
  35.   videocursor(0,0,36);
  36.   videoputc(' ',2);
  37.   videoscroll(1,0,24,14,0,0);
  38.   videocursor(0,0,0);
  39.   kwait(3);
  40.   switch (c) {
  41.     case 'A': dd=KK*KK; ijn(dd,KK,2); sijn(dd,0,1); break;
  42.     case 'B': dd=KK*KK; ijn(dd,KK,2); sijn(dd,1,1); break;
  43.     case 'C': dd=KK*KK; ijn(dd,KK,2); sijn(dd,2,1); break;
  44.     case 'D': dd=KK*KK; ijn(dd,KK,2); zijn(dd,0,1); break;
  45.     case 'E': dd=KK*KK; ijn(dd,KK,2); zijn(dd,1,1); break;
  46.     case 'F': dd=KK*KK; ijn(dd,KK,2); zijn(dd,2,1); break;
  47.     case 'G': kwait(0); printf("Precursors 0*:");  kwait(0); xpass1(0); break;
  48.     case 'H': kwait(0); printf("Precursors 1*:");  kwait(0); xpass1(1); break;
  49.     case 'I': kwait(0); printf("Precursors 2*:");  kwait(0); xpass1(2); break;
  50.     case 'a': kwait(0); printf("(1,1) gliders:");  kwait(0); apass1(2); break;
  51.     case 'b': kwait(0); printf("(1,0) static:");   kwait(0); apass1(1); break;
  52.     case 'c': kwait(0); printf("(1,-1) gliders:"); kwait(0); apass1(0); break;
  53.     case 'd': kwait(0); printf("(2,-2) gliders:"); kwait(0); bpass1(0); break;
  54.     case 'e': kwait(0); printf("(2,-1) gliders:"); kwait(0); bpass1(1); break;
  55.     case 'f': kwait(0); printf("(2,0) cycles:");   kwait(0); bpass1(2); break;
  56.     case 'g': kwait(0); printf("(2,1) gliders:");  kwait(0); bpass1(3); break;
  57.     case 'h': kwait(0); printf("(2,2) gliders:");  kwait(0); bpass1(4); break;
  58.     case 'i': kwait(0); printf("(3,-3) gliders:"); kwait(0); cpass1(0); break;
  59.     case 'j': kwait(0); printf("(3,-2) gliders:"); kwait(0); cpass1(1); break;
  60.     case 'k': kwait(0); printf("(3,-1) gliders:"); kwait(0); cpass1(2); break;
  61.     case 'l': kwait(0); printf("(3,0) cycles:");   kwait(0); cpass1(3); break;
  62.     case 'm': kwait(0); printf("(3,1) gliders:");  kwait(0); cpass1(4); break;
  63.     case 'n': kwait(0); printf("(3,2) gliders:");  kwait(0); cpass1(5); break;
  64.     case 'o': kwait(0); printf("(3,3) gliders:");  kwait(0); cpass1(6); break;
  65.     case 'p': kwait(0); printf("(4,-4) gliders:"); kwait(0); dpass1(0); break;
  66.     case 'q': kwait(0); printf("(4,-3) gliders:"); kwait(0); dpass1(1); break;
  67.     case 'r': kwait(0); printf("(4,-2) gliders:"); kwait(0); dpass1(2); break;
  68.     case 's': kwait(0); printf("(4,-1) gliders:"); kwait(0); dpass1(3); break;
  69.     case 't': kwait(0); printf("(4,0) cycles:");   kwait(0); dpass1(4); break;
  70.     case 'u': kwait(0); printf("(4,1) gliders:");  kwait(0); dpass1(5); break;
  71.     case 'v': kwait(0); printf("(4,2) gliders:");  kwait(0); dpass1(6); break;
  72.     case 'w': kwait(0); printf("(4,3) gliders:");  kwait(0); dpass1(7); break;
  73.     case 'x': kwait(0); printf("(4,4) gliders:");  kwait(0); dpass1(8); break;
  74.     case '1': dd=KK*KK; clijn(); ijn(dd,KK,2); break;
  75.     case '2': dd=KK*KK*KK; clijn(); ijn(dd,KK,2); break;
  76.     case '3': dd=KK*KK*KK*KK; clijn(); ijn(dd,KK,2); break;
  77.     case '4': dd=KK*KK*KK*KK*KK; clijn(); ijn(dd,KK,2); break;
  78.     case '5': dd=KK*KK*KK*KK*KK*KK; clijn(); ijn(dd,KK,2); break;
  79.     case '6': dd=KK*KK*KK*KK*KK*KK*KK; clijn(); ijn(dd,KK,2); break;
  80.     case '+': videopalette(WHCYMAG); break;
  81.     case '-': videopalette(YELREGR); break;
  82.     case '?': case '/': clijn(); break;
  83.     default: break;
  84.     }; /* end switch */
  85.   };   /* end while  */
  86.   videopalette(WHCYMAG);
  87.   videomode(T80X25);
  88. }
  89.  
  90. /* clear edijn screen and set up menu */
  91. clijn() {
  92.   videomode(COLGRAF);
  93.   videopalette(YELREGR);
  94.   videocursor(0,0,0);
  95.   scrrul();
  96.   videocursor(0,3,0);
  97.   printf("de Bruijn ring\n\n");
  98.   printf("abc   - (1,x)\n");
  99.   printf("ABC   - (all)\n");
  100.   printf("defgh - (2,x)\n");
  101.   printf("ijklmno (3,x)\n");
  102.   printf("pqrstuvwx (4)\n");
  103.   printf("123456 -diagram\n");
  104.   printf("DEF  -  0*1*2*\n");
  105.   printf("GHI  -  full n*\n");
  106.   printf("+-   - pallette\n");
  107.   printf("z  - clr screen\n");
  108.   printf("<cr> - exit\n\n");
  109. }
  110.  
  111. /* generate a de Bruijn diagram with m nodes, n links per node, color l */
  112. ijn(m,n,l) int m, n, l; {
  113. int    i, j;
  114. double ii, jj, nn, x, y, t, h;
  115. double sin(), cos();
  116. nn=(double)(n);
  117. t=6.28318/((double)(m));
  118. h=0.5*t;
  119. for (i=0; i<m; i++) {
  120.   ii=(double)(i);
  121.   for (j=0; j<n; j++) {
  122.     jj=(double)(j);
  123.     x=JX-RI*sin(ii*t+h);
  124.     y=JY-RI*cos(ii*t+h);
  125.     videoline(x,y,0);
  126.     x=JX-RO*sin((nn*ii+jj)*t+h);
  127.     y=JY-RO*cos((nn*ii+jj)*t+h);
  128.     videoline(x,y,l);
  129.     };
  130.   };
  131. }
  132.  
  133. /* insert a link into a de Bruijn diagram */
  134. /* m - number of vertices */
  135. /* u - initial vertex     */
  136. /* v - terminal vertex    */
  137. /* l - color of link      */
  138. lijnk(m,u,v,l) int m, u, v, l; {
  139. double uu, vv, x, y, t, h;
  140. double sin(), cos();
  141. t=6.28318/((double)(m));
  142. uu=t*((double)(u));
  143. vv=t*((double)(v));
  144. h=0.5*t;
  145. x=JX-RI*sin(uu+h);
  146. y=JY-RI*cos(uu+h);
  147. videoline(x,y,0);
  148. x=JX-RO*sin(vv+h);
  149. y=JY-RO*cos(vv+h);
  150. videoline(x,y,l);
  151. }
  152.  
  153. /* generate a de Bruijn diagram showing antecedents of state k in color l */
  154. sijn(m,k,l) int m, k, l; {
  155. int    i0, i1, i2;
  156. double th, x, y, t, h;
  157. double sin(), cos();
  158. t=6.28318/((double)(m));
  159. h=0.5*t;
  160. for (i0=0; i0<KK; i0++) {
  161. for (i1=0; i1<KK; i1++) {
  162. for (i2=0; i2<KK; i2++) {
  163.   if (k==ascrule[i0][i1][i2]-'0') {
  164.     th=((double)(i0*KK+i1))*t+h;
  165.     x=JX-RI*sin(th);
  166.     y=JY-RI*cos(th);
  167.     videoline(x,y,0);
  168.     th=((double)(i1*KK+i2))*t+h;
  169.     x=JX-RO*sin(th);
  170.     y=JY-RO*cos(th);
  171.     videoline(x,y,l);
  172.     };       /* end if    */
  173.   };};};   /* end for's */
  174. }       /* end sijn  */
  175.  
  176. /* generate a de Bruijn diagram showing the (1,k) links in color l */
  177. zijn(m,k,l) int m, k, l; {
  178. int    i, i0, i1, i2;
  179. double th, x, y, t, h;
  180. double sin(), cos();
  181. t=6.28318/((double)(m));
  182. h=0.5*t;
  183. for (i0=0; i0<KK; i0++) {
  184. for (i1=0; i1<KK; i1++) {
  185. for (i2=0; i2<KK; i2++) {
  186.   i=ascrule[i0][i1][i2]-'0';
  187.   if ((k==0 && i==i0) || (k==1 && i==i1) || (k==2 && i==i2)) {
  188.     th=((double)(i0*KK+i1))*t+h;
  189.     x=JX-RI*sin(th);
  190.     y=JY-RI*cos(th);
  191.     videoline(x,y,0);
  192.     th=((double)(i1*KK+i2))*t+h;
  193.     x=JX-RO*sin(th);
  194.     y=JY-RO*cos(th);
  195.     videoline(x,y,l);
  196.     };       /* end if    */
  197.   };};};   /* end for's */
  198. }       /* end zijn  */
  199.  
  200. /* plot graph on video screen            */
  201. /* move pen from present position to (x,y) */
  202. /* raised if l=0; color l if l>0       */
  203. videoline(x,y,l) double x, y; int l; {
  204. int k, ax, ay, dx, dy, di, dj, x1, y1;
  205. /* if (x<0.0) return; if (x>1.0) return */
  206. /* if (y<0.0) return; if (y>1.0) return */
  207. x1=(int)(199.0*(1.0-y));
  208. y1=(int)(199.0*x);
  209. dx=x1-ix0;
  210. dy=y1-iy0;
  211. ax=dx>=0?dx:-dx;
  212. ay=dy>=0?dy:-dy;
  213. di=dx>=0?1:-1; if (dx==0) di=0;
  214. dj=dy>=0?1:-1; if (dy==0) dj=0;
  215.  
  216. if (l>0) {if (ax!=0 || ay!=0) {
  217.   if (ax>=ay) {for (k=0; k<=ax; k++) videodot(ix0+di*k,60+iy0+(k*dy)/ax,l);}
  218.      else {for (k=0; k<=ay; k++) videodot(ix0+(k*dx)/ay,60+iy0+dj*k,l);};
  219.   }; };
  220. ix0=x1;
  221. iy0=y1;
  222. }
  223.  
  224. /* approximation to sine */
  225. double sin(x) double x; {
  226. if (x<0.0) return(-sin(-x));
  227. while (x>=6.28318) x-=6.28318;
  228. if (x>=3.142) return(-sin(x-3.14159));
  229. if (x>=1.571) return(sin(3.14159-x));
  230. return(x*(1.0-0.166*(x*x-0.05*x*x)));
  231. }
  232.  
  233. /* approximation to cosine */
  234. double cos(x) double x; {double sin(); return(sin(x+1.57079));}
  235.  
  236. /* ONE31.C */
  237.  
  238. /* Pass 1a analyzes all the configurations which fulfil (1,-1+l) */
  239. apass1(l) {
  240. char arry[KK][KK][KK];
  241. int  i,j,k,m;
  242. mc=2;
  243. asctobin();
  244. printf(" Pass1a\015");
  245. for (i=0; i<KK; i++) {
  246. for (j=0; j<KK; j++) {
  247. for (k=0; k<KK; k++) {
  248.   switch (l) {
  249.     case 0: m=i; break;
  250.     case 1: m=j; break;
  251.     case 2: m=k; break;
  252.     default: break;};
  253.   arry[i][j][k]=binrule[i][j][k]==m?'Y':'N';
  254.   };};};
  255. apass2i(arry);
  256. apass2o(arry);
  257. apass4(arry);
  258. }
  259.  
  260. /* Pass 1x analyzes all the configurations mapping into a constant */
  261. xpass1(c) int c; {
  262. char arry[KK][KK][KK];
  263. int  i,j,k;
  264. mc=2;
  265. asctobin();
  266. printf(" Pass1a\015");
  267. for (i=0; i<KK; i++) {
  268. for (j=0; j<KK; j++) {
  269. for (k=0; k<KK; k++) {
  270.   arry[i][j][k]=binrule[i][j][k]==c?'Y':'N';
  271.   };};};
  272. apass2i(arry);
  273. apass2o(arry);
  274. apass4(arry);
  275. }
  276.  
  277. /* Pass 2i flags all links with an incoming arrow */
  278. /* Pass 2o flags all links with an outgoing arrow */
  279. /* Then pass 3 discards all unflagged links */
  280. /* Passes 2 and 3 alternate until no change is observed */
  281.  
  282. apass2i(arry) char arry[KK][KK][KK]; {int i,j,k,m;
  283. do {
  284. printf(" Pass2i\015");
  285. for (i=0; i<KK; i++) {
  286. for (j=0; j<KK; j++) {
  287. for (k=0; k<KK; k++) {
  288. if ((arry[i][j][k]&0x5F)=='Y') {for (m=0; m<KK; m++) arry[j][k][m]|=0x20;};
  289. };};}; } while (apass3(arry)!=0); }
  290.  
  291. apass2o(arry) char arry[KK][KK][KK]; {int i,j,k,m;
  292. do {
  293. printf(" Pass2o\015");
  294. for (i=0; i<KK; i++) {
  295. for (j=0; j<KK; j++) {
  296. for (k=0; k<KK; k++) {
  297. if ((arry[i][j][k]&0x5F)=='Y') {for (m=0; m<KK; m++) arry[m][i][j]|=0x20;};
  298. };};}; } while (apass3(arry)!=0); }
  299.  
  300. /* Pass 3 - erase flags, mark survivors, count changes */
  301.  
  302. int apass3(arry) char arry[KK][KK][KK]; {int i,j,k,l;
  303. l=0;
  304. printf(" Pass3 \015");
  305. for (i=0; i<KK; i++) {
  306. for (j=0; j<KK; j++) {
  307. for (k=0; k<KK; k++) {
  308.   switch (arry[i][j][k]) {
  309.     case 'y': arry[i][j][k]='Y'; break;
  310.     case 'Y': arry[i][j][k]='N'; l=1; break;
  311.     case 'n': case 'N': arry[i][j][k]='N'; break;
  312.     default: break; };
  313. };};};
  314. return l;
  315. }
  316.  
  317. /* Pass 4 - print the loops which remain */
  318. apass4(arry) char arry[KK][KK][KK]; {
  319. int i0, i1, i2;
  320. int j0, j1, j2;
  321. int k, l, m;
  322. printf(" pass4 \015");
  323. for (i0=0; i0<KK; i0++) {
  324. for (i1=0; i1<KK; i1++) {
  325. for (i2=0; i2<KK; i2++) {
  326. j0=i0; j1=i1; j2=i2; l=0; m=0;
  327. do {
  328.         if (arry[0][j1][j2]=='Y')
  329.     {arry[0][j1][j2]='y';
  330.     k=j2; j2=j1; j1=0; m=1;}
  331.   else {if (arry[1][j1][j2]=='Y')
  332.     {arry[1][j1][j2]='y';
  333.     k=j2; j2=j1; j1=1; m=1;}
  334.   else {if (arry[2][j1][j2]=='Y')
  335.     {arry[2][j1][j2]='y';
  336.     k=j2; j2=j1; j1=2; m=1;}
  337.   else {l=1; if (m==1) {j0=j1; j1=j2; j2=k;}; };};};
  338.   } while (l==0);
  339. l=0; 
  340. m=0;
  341. do {
  342.         if (arry[j0][j1][0]=='y')
  343.    {aprf(j0,j1,0);
  344.    arry[j0][j1][0]='N';
  345.    j0=j1; j1=0; m=1;}
  346.   else {if (arry[j0][j1][1]=='y')
  347.    {aprf(j0,j1,1);
  348.    arry[j0][j1][1]='N';
  349.    j0=j1; j1=1; m=1;}
  350.   else {if (arry[j0][j1][2]=='y')
  351.    {aprf(j0,j1,2);
  352.    arry[j0][j1][2]='N';
  353.    j0=j1; j1=2; m=1;}
  354.   else {l=1;};};};
  355.   } while (l==0);
  356. l=0;
  357. do {
  358.         if (arry[j0][j1][0]=='Y')
  359.    {aprf(j0,j1,0);
  360.    arry[j0][j1][0]='N';
  361.    j0=j1; j1=0; m=1;}
  362.   else {if (arry[j0][j1][1]=='Y')
  363.    {aprf(j0,j1,1);
  364.    arry[j0][j1][1]='N';
  365.    j0=j1; j1=1; m=1;}
  366.   else {if (arry[j0][j1][2]=='Y')
  367.    {aprf(j0,j1,2);
  368.    arry[j0][j1][2]='N';
  369.    j0=j1; j1=2; m=1;}
  370.   else {l=1; if (m==1) kwait(0);};};};
  371.   } while (l==0);
  372. };};};
  373. }
  374.  
  375. /* print one link of the de Bruijn diagram */
  376. aprf(i,j,k) int i, j, k; {
  377. kwait(1);
  378. printf("%1d",i);
  379. printf("%1d",j);
  380. printf("-");
  381. printf("%1d",k);
  382. printf("  ");
  383. lijnk(dd,i*KK+j,j*KK+k,3);
  384. }
  385.  
  386. /* TWO31.C */
  387.  
  388. /* Pass 1 analyzes all sequences conforming to (2,-2+l)  */
  389. bpass1(l) int l; {
  390. char arry[KK][KK][KK][KK][KK];
  391. int  i0, i1, i2, i3, i4;
  392. int  i, j, k, m;
  393. mc=2;
  394. asctobin();
  395. printf(" Pass1a\015");
  396. for (i0=0; i0<KK; i0++) {
  397. for (i1=0; i1<KK; i1++) {
  398. for (i2=0; i2<KK; i2++) {
  399. for (i3=0; i3<KK; i3++) {
  400. for (i4=0; i4<KK; i4++) {
  401.   i=binrule[i0][i1][i2];
  402.   j=binrule[i1][i2][i3];
  403.   k=binrule[i2][i3][i4];
  404.   switch (l) {
  405.     case 0: m=i0; break;
  406.     case 1: m=i1; break;
  407.     case 2: m=i2; break;
  408.     case 3: m=i3; break;
  409.     case 4: m=i4; break;
  410.     default: break;};
  411.   arry[i0][i1][i2][i3][i4]=binrule[i][j][k]==m?'Y':'N';
  412.   };};};};};
  413. bpass2i(arry);
  414. bpass2o(arry);
  415. bpass4(arry);
  416. }
  417.  
  418. /* Passs 2i flags links which have an incoming arrow */
  419. bpass2i(arry) char arry[KK][KK][KK][KK][KK]; {
  420. int i0, i1, i2, i3, i4, m;
  421. printf(" Pass2i\015");
  422. do {
  423. for (i0=0; i0<KK; i0++) {
  424. for (i1=0; i1<KK; i1++) {
  425. for (i2=0; i2<KK; i2++) {
  426. for (i3=0; i3<KK; i3++) {
  427. for (i4=0; i4<KK; i4++) {
  428. if ((arry[i0][i1][i2][i3][i4]&0x5F)=='Y')
  429.  {for (m=0; m<KK; m++) arry[i1][i2][i3][i4][m]|=0x20;};
  430. };};};};};
  431. } while (bpass3(arry)!=0); }
  432.  
  433. /* Passs 2o flags links which have an outgoing arrow */
  434. bpass2o(arry) char arry[KK][KK][KK][KK][KK]; {
  435. int i0, i1, i2, i3, i4, m;
  436. do {
  437. printf(" Pass2o\015");
  438. for (i0=0; i0<KK; i0++) {
  439. for (i1=0; i1<KK; i1++) {
  440. for (i2=0; i2<KK; i2++) {
  441. for (i3=0; i3<KK; i3++) {
  442. for (i4=0; i4<KK; i4++) {
  443. if ((arry[i0][i1][i2][i3][i4]&0x5F)=='Y')
  444.  {for (m=0; m<KK; m++) arry[m][i0][i1][i2][i3]|=0x20;};
  445. };};};};};
  446. } while (bpass3(arry)!=0); }
  447.  
  448. /*  Pass 3 erases flags, marks survivors, counts channges */
  449. int bpass3(arry) char arry[KK][KK][KK][KK][KK]; {
  450. int i0, i1, i2, i3, i4, l;
  451. printf(" Pass3 \015");
  452. l=0;
  453. for (i0=0; i0<KK; i0++) {
  454. for (i1=0; i1<KK; i1++) {
  455. for (i2=0; i2<KK; i2++) {
  456. for (i3=0; i3<KK; i3++) {
  457. for (i4=0; i4<KK; i4++) {
  458. switch (arry[i0][i1][i2][i3][i4]) {
  459.     case 'y': arry[i0][i1][i2][i3][i4]='Y'; break;
  460.     case 'Y': arry[i0][i1][i2][i3][i4]='N'; l=1; break;
  461.     case 'n': case 'N': arry[i0][i1][i2][i3][i4]='N'; break;
  462.     default: break; };
  463. };};};};};
  464. return l;
  465. }
  466.  
  467. /* Pass 4 prints any loops which remain */
  468. bpass4(arry) char arry[KK][KK][KK][KK][KK]; {
  469. int i0, i1, i2, i3, i4;
  470. int j0, j1, j2, j3, j4, k, l, m;
  471. printf(" pass4 \015");
  472. for (i0=0; i0<KK; i0++) {
  473. for (i1=0; i1<KK; i1++) {
  474. for (i2=0; i2<KK; i2++) {
  475. for (i3=0; i3<KK; i3++) {
  476. for (i4=0; i4<KK; i4++) {
  477. j0=i0; j1=i1; j2=i2; j3=i3; j4=i4; l=0; m=0;
  478. do {
  479.         if (arry[0][j1][j2][j3][j4]=='Y')
  480.     {arry[0][j1][j2][j3][j4]='y';
  481.     k=j4; j4=j3; j3=j2; j2=j1; j1=0; m=1;}
  482.   else {if (arry[1][j1][j2][j3][j4]=='Y')
  483.     {arry[1][j1][j2][j3][j4]='y';
  484.     k=j4; j4=j3; j3=j2; j2=j1; j1=1; m=1;}
  485.   else {if (arry[2][j1][j2][j3][j4]=='Y')
  486.     {arry[2][j1][j2][j3][j4]='y';
  487.     k=j4; j4=j3; j3=j2; j2=j1; j1=2; m=1;}
  488.   else {l=1; if (m==1) {j0=j1; j1=j2; j2=j3; j3=j4; j4=k;}; };};};
  489.   } while (l==0);
  490. l=0; 
  491. m=0;
  492. do {
  493.         if (arry[j0][j1][j2][j3][0]=='y')
  494.    {bprf(j0,j1,j2,j3,0);
  495.    arry[j0][j1][j2][j3][0]='N';
  496.    j0=j1; j1=j2; j2=j3; j3=0; m=1;}
  497.   else {if (arry[j0][j1][j2][j3][1]=='y')
  498.    {bprf(j0,j1,j2,j3,1);
  499.    arry[j0][j1][j2][j3][1]='N';
  500.    j0=j1; j1=j2; j2=j3; j3=1; m=1;}
  501.   else {if (arry[j0][j1][j2][j3][2]=='y')
  502.    {bprf(j0,j1,j2,j3,2);
  503.    arry[j0][j1][j2][j3][2]='N';
  504.    j0=j1; j1=j2; j2=j3; j3=2; m=1;}
  505.   else {l=1;};};};
  506.   } while (l==0);
  507. l=0;
  508. do {
  509.         if (arry[j0][j1][j2][j3][0]=='Y')
  510.    {bprf(j0,j1,j2,j3,0);
  511.    arry[j0][j1][j2][j3][0]='N';
  512.    j0=j1; j1=j2; j2=j3; j3=0; m=1;}
  513.   else {if (arry[j0][j1][j2][j3][1]=='Y')
  514.    {bprf(j0,j1,j2,j3,1);
  515.    arry[j0][j1][j2][j3][1]='N';
  516.    j0=j1; j1=j2; j2=j3; j3=1; m=1;}
  517.   else {if (arry[j0][j1][j2][j3][2]=='Y')
  518.    {bprf(j0,j1,j2,j3,2);
  519.    arry[j0][j1][j2][j3][2]='N';
  520.    j0=j1; j1=j2; j2=j3; j3=2; m=1;}
  521.   else {l=1; if (m==1) {kwait(0);} ;};};};
  522.   } while (l==0);
  523. };};};};};
  524. }
  525.  
  526. /* print one of the links in a chain */
  527. bprf(i0,i1,i2,i3,i4) int i0, i1,i2, i3, i4; {
  528. kwait(1);
  529. printf("%1d",i0);
  530. printf("%1d",i1);
  531. printf("%1d",i2);
  532. printf("%1d",i3);
  533. printf("-");
  534. printf("%1d",i4);
  535. printf(" ");
  536. lijnk(dd,((i0*KK+i1)*KK+i2)*KK+i3,((i1*KK+i2)*KK+i3)*KK+i4,3);
  537. }
  538.  
  539. /* pause at the end of a full screen        */
  540. /* kwait(0) - short or null line        */
  541. /* kwait(1) - split long lines as necessary */
  542. /* kwait(2) - wait to continue            */
  543. /* kwait(3) - reset                 */
  544. kwait(i) int i; {
  545. switch (i) {
  546.   case 0: printf("\n"); nc=0; nl++; break;
  547.   case 1: if (nc==mc) {printf("&\n"); nc=1; nl++;} else nc++; break;
  548.   case 2: nl=NW; break;
  549.   case 3: nc=0; nl=0; break;
  550.   default: break;};
  551. if (nl==NW) {
  552.   nl=1;
  553.   printf(" press any key to continue\015");
  554.   while (kbdst()) {};
  555.   kbdin();
  556.   printf("                          \015");
  557.   videoscroll(1,0,24,14,0,0);
  558.   videocursor(0,0,0);
  559.   printf("\n");
  560.   };
  561. }
  562.  
  563. /* THREE31.C */
  564.  
  565. /* Pass 1 marks sequences conforming to (3,-3+l) */
  566. cpass1(l) int l; {
  567. char arry[KK][KK][KK][KK][KK][KK][KK];
  568. int  i0, i1, i2, i3, i4, i5, i6;
  569. int  j0, j1, j2, j3, j4;
  570. int  i, j, k, m;
  571. mc=1;
  572. asctobin();
  573. printf(" pass1 \015");
  574. for (i0=0; i0<KK; i0++) {
  575. for (i1=0; i1<KK; i1++) {
  576. for (i2=0; i2<KK; i2++) {
  577. for (i3=0; i3<KK; i3++) {
  578. for (i4=0; i4<KK; i4++) {
  579. for (i5=0; i5<KK; i5++) {
  580. for (i6=0; i6<KK; i6++) {
  581. j0=binrule[i0][i1][i2];
  582. j1=binrule[i1][i2][i3];
  583. j2=binrule[i2][i3][i4];
  584. j3=binrule[i3][i4][i5];
  585. j4=binrule[i4][i5][i6];
  586. i=binrule[j0][j1][j2];
  587. j=binrule[j1][j2][j3];
  588. k=binrule[j2][j3][j4];
  589. switch (l) {
  590.   case 0: m=i0; break;
  591.   case 1: m=i1; break;
  592.   case 2: m=i2; break;
  593.   case 3: m=i3; break;
  594.   case 4: m=i4; break;
  595.   case 5: m=i5; break;
  596.   case 6: m=i6; break;
  597.   default: break;};
  598. arry[i0][i1][i2][i3][i4][i5][i6]=binrule[i][j][k]==m?'Y':'N';
  599. };};};};};};};
  600. cpass2i(arry);
  601. cpass2o(arry);
  602. cpass4(arry);
  603. }
  604.  
  605. /* Pass 2i flags links which have an incoming arrow */
  606. cpass2i(arry) char arry[KK][KK][KK][KK][KK][KK][KK]; {
  607. int i0, i1, i2, i3, i4, i5, i6, m;
  608. do {
  609. printf(" pass2i\015");
  610. for (i0=0; i0<KK; i0++) {
  611. for (i1=0; i1<KK; i1++) {
  612. for (i2=0; i2<KK; i2++) {
  613. for (i3=0; i3<KK; i3++) {
  614. for (i4=0; i4<KK; i4++) {
  615. for (i5=0; i5<KK; i5++) {
  616. for (i6=0; i6<KK; i6++) {
  617. if ((arry[i0][i1][i2][i3][i4][i5][i6]&0x5F)=='Y')
  618.  {for (m=0; m<KK; m++) arry[i1][i2][i3][i4][i5][i6][m]|=0x20;};
  619. };};};};};};};
  620. } while (cpass3(arry)!=0); }
  621.  
  622. /* Pass 2o flags links which have an outgoing arrow */
  623. cpass2o(arry) char arry[KK][KK][KK][KK][KK][KK][KK]; {
  624. int i0, i1, i2, i3, i4, i5, i6, m;
  625. do {
  626. printf(" pass2o\015");
  627. for (i0=0; i0<KK; i0++) {
  628. for (i1=0; i1<KK; i1++) {
  629. for (i2=0; i2<KK; i2++) {
  630. for (i3=0; i3<KK; i3++) {
  631. for (i4=0; i4<KK; i4++) {
  632. for (i5=0; i5<KK; i5++) {
  633. for (i6=0; i6<KK; i6++) {
  634. if ((arry[i0][i1][i2][i3][i4][i5][i6]&0x5F)=='Y')
  635.  {for (m=0; m<KK; m++) arry[m][i0][i1][i2][i3][i4][i5]|=0x20;};
  636. };};};};};};};
  637. } while (cpass3(arry)!=0); }
  638.  
  639. /*  Pass 3 erases flags, marks survivors, counts channges */
  640. int cpass3(arry) char arry[KK][KK][KK][KK][KK][KK][KK]; {
  641. int i0, i1, i2, i3, i4, i5, i6, l;
  642. l=0;
  643. printf(" pass3 \015");
  644. for (i0=0; i0<KK; i0++) {
  645. for (i1=0; i1<KK; i1++) {
  646. for (i2=0; i2<KK; i2++) {
  647. for (i3=0; i3<KK; i3++) {
  648. for (i4=0; i4<KK; i4++) {
  649. for (i5=0; i5<KK; i5++) {
  650. for (i6=0; i6<KK; i6++) {
  651. switch (arry[i0][i1][i2][i3][i4][i5][i6]) {
  652.     case 'y': arry[i0][i1][i2][i3][i4][i5][i6]='Y'; break;
  653.     case 'Y': arry[i0][i1][i2][i3][i4][i5][i6]='N'; l=1; break;
  654.     case 'n': case 'N': arry[i0][i1][i2][i3][i4][i5][i6]='N'; break;
  655.     default: break; };
  656. };};};};};};};
  657. return l; }
  658.  
  659. /* Pass 4 prints the loops which remain */
  660. cpass4(arry) char arry[KK][KK][KK][KK][KK][KK][KK]; {
  661. int i0, i1, i2, i3, i4, i5, i6;
  662. int j0, j1, j2, j3, j4, j5, j6;
  663. int  k, l, m;
  664. printf(" pass4 \015");
  665. for (i0=0; i0<KK; i0++) {
  666. for (i1=0; i1<KK; i1++) {
  667. for (i2=0; i2<KK; i2++) {
  668. for (i3=0; i3<KK; i3++) {
  669. for (i4=0; i4<KK; i4++) {
  670. for (i5=0; i5<KK; i5++) {
  671. for (i6=0; i6<KK; i6++) {
  672. j0=i0; j1=i1; j2=i2; j3=i3; j4=i4; j5=i5; j6=i6;
  673. l=0;
  674. m=0;
  675. do {
  676.         if (arry[0][j1][j2][j3][j4][j5][j6]=='Y')
  677.     {arry[0][j1][j2][j3][j4][j5][j6]='y';
  678.     k=j6; j6=j5; j5=j4; j4=j3; j3=j2; j2=j1; j1=0; m=1;}
  679.   else {if (arry[1][j1][j2][j3][j4][j5][j6]=='Y')
  680.     {arry[1][j1][j2][j3][j4][j5][j6]='y';
  681.     k=j6; j6=j5; j5=j4; j4=j3; j3=j2; j2=j1; j1=1; m=1;}
  682.   else {if (arry[2][j1][j2][j3][j4][j5][j6]=='Y')
  683.     {arry[2][j1][j2][j3][j4][j5][j6]='y';
  684.     k=j6; j6=j5; j5=j4; j4=j3; j3=j2; j2=j1; j1=2; m=1;}
  685.   else {l=1;
  686.     if (m==1) {j0=j1; j1=j2; j2=j3; j3=j4; j4=j5; j5=j6; j6=k;};
  687.     };};};
  688.   } while (l==0);
  689. l=0; 
  690. m=0;
  691. do {
  692.         if (arry[j0][j1][j2][j3][j4][j5][0]=='y')
  693.    {cprf(j0,j1,j2,j3,j4,j5,0);
  694.    arry[j0][j1][j2][j3][j4][j5][0]='N';
  695.    j0=j1; j1=j2; j2=j3; j3=j4; j4=j5; j5=0; m=1;}
  696.   else {if (arry[j0][j1][j2][j3][j4][j5][1]=='y')
  697.    {cprf(j0,j1,j2,j3,j4,j5,1);
  698.    arry[j0][j1][j2][j3][j4][j5][1]='N';
  699.    j0=j1; j1=j2; j2=j3; j3=j4; j4=j5; j5=1; m=1;}
  700.   else {if (arry[j0][j1][j2][j3][j4][j5][2]=='y')
  701.    {cprf(j0,j1,j2,j3,j4,j5,2);
  702.    arry[j0][j1][j2][j3][j4][j5][2]='N';
  703.    j0=j1; j1=j2; j2=j3; j3=j4; j4=j5; j5=2; m=1;}
  704.   else {l=1;};};};
  705.   } while (l==0);
  706. l=0;
  707. do {
  708.         if (arry[j0][j1][j2][j3][j4][j5][0]=='Y')
  709.    {cprf(j0,j1,j2,j3,j4,j5,0);
  710.    arry[j0][j1][j2][j3][j4][j5][0]='N';
  711.    j0=j1; j1=j2; j2=j3; j3=j4; j4=j5; j5=0; m=1;}
  712.   else {if (arry[j0][j1][j2][j3][j4][j5][1]=='Y')
  713.    {cprf(j0,j1,j2,j3,j4,j5,1);
  714.    arry[j0][j1][j2][j3][j4][j5][1]='N';
  715.    j0=j1; j1=j2; j2=j3; j3=j4; j4=j5; j5=1; m=1;}
  716.   else {if (arry[j0][j1][j2][j3][j4][j5][2]=='Y')
  717.    {cprf(j0,j1,j2,j3,j4,j5,2);
  718.    arry[j0][j1][j2][j3][j4][j5][2]='N';
  719.    j0=j1; j1=j2; j2=j3; j3=j4; j4=j5; j5=2; m=1;}
  720.   else {l=1; if (m==1) kwait(0);};};};
  721.   } while (l==0);
  722. };};};};};};};
  723. }
  724.  
  725. /* print one of the individual links in a chain */
  726. cprf(i0,i1,i2,i3,i4,i5,i6)
  727. int i0, i1, i2, i3, i4, i5, i6; {int i, j;
  728. kwait(1);
  729. printf("%1d",i0);
  730. printf("%1d",i1);
  731. printf("%1d",i2);
  732. printf("%1d",i3);
  733. printf("%1d",i4);
  734. printf("%1d",i5);
  735. printf("-");
  736. printf("%1d",i6);
  737. printf(" ");
  738. i=((((i0*KK+i1)*KK+i2)*KK+i3)*KK+i4)*KK+i5;
  739. j=((((i1*KK+i2)*KK+i3)*KK+i4)*KK+i5)*KK+i6;
  740. lijnk(dd,i,j,3);
  741. }
  742.  
  743. /* FOUR31.C */
  744.  
  745. /* mark sequences conforming to (4,-4+l) */
  746. dpass1(l) int l; {
  747. char arry[KK][KK][KK][KK][KK][KK][KK][KK][KK];
  748. int i0, i1, i2, i3, i4, i5, i6, i7, i8;
  749. int j0, j1, j2, j3, j4, j5, j6;
  750. int k0, k1, k2, k3, k4;
  751. int i, j, k, m;
  752. mc=1;
  753. asctobin();
  754. printf(" pass1 \015");
  755. for (i0=0; i0<KK; i0++) {
  756. for (i1=0; i1<KK; i1++) {
  757. for (i2=0; i2<KK; i2++) {
  758. for (i3=0; i3<KK; i3++) {
  759. for (i4=0; i4<KK; i4++) {
  760. for (i5=0; i5<KK; i5++) {
  761. for (i6=0; i6<KK; i6++) {
  762. for (i7=0; i7<KK; i7++) {
  763. for (i8=0; i8<KK; i8++) {
  764. j0=binrule[i0][i1][i2];
  765. j1=binrule[i1][i2][i3];
  766. j2=binrule[i2][i3][i4];
  767. j3=binrule[i3][i4][i5];
  768. j4=binrule[i4][i5][i6];
  769. j5=binrule[i5][i6][i7];
  770. j6=binrule[i6][i7][i8];
  771. k0=binrule[j0][j1][j2];
  772. k1=binrule[j1][j2][j3];
  773. k2=binrule[j2][j3][j4];
  774. k3=binrule[j3][j4][j5];
  775. k4=binrule[j4][j5][j6];
  776. i=binrule[k0][k1][k2];
  777. j=binrule[k1][k2][k3];
  778. k=binrule[k2][k3][k4];
  779. switch (l) {
  780.   case 0: m=i0; break;
  781.   case 1: m=i1; break;
  782.   case 2: m=i2; break;
  783.   case 3: m=i3; break;
  784.   case 4: m=i4; break;
  785.   case 5: m=i5; break;
  786.   case 6: m=i6; break;
  787.   case 7: m=i7; break;
  788.   case 8: m=i8; break;
  789.   default: break;};
  790. arry[i0][i1][i2][i3][i4][i5][i6][i7][i8]=binrule[i][j][k]==m?'Y':'N';
  791. };};};};};};};};};
  792. dpass2i(arry);
  793. dpass2o(arry);
  794. dpass4(arry);
  795. }
  796.  
  797. /* Pass 2i flags links which have an incoming arrow */
  798. dpass2i(arry) char arry[KK][KK][KK][KK][KK][KK][KK][KK][KK]; {
  799. int i0, i1, i2, i3, i4, i5, i6, i7, i8, m;
  800. do {
  801. printf(" pass2i\015");
  802. for (i0=0; i0<KK; i0++) {
  803. for (i1=0; i1<KK; i1++) {
  804. for (i2=0; i2<KK; i2++) {
  805. for (i3=0; i3<KK; i3++) {
  806. for (i4=0; i4<KK; i4++) {
  807. for (i5=0; i5<KK; i5++) {
  808. for (i6=0; i6<KK; i6++) {
  809. for (i7=0; i7<KK; i7++) {
  810. for (i8=0; i8<KK; i8++) {
  811. if ((arry[i0][i1][i2][i3][i4][i5][i6][i7][i8]&0x5F)=='Y')
  812.  {for (m=0; m<KK; m++) arry[i1][i2][i3][i4][i5][i6][i7][i8][m]|=0x20;};
  813. };};};};};};};};};
  814. } while (dpass3(arry)!=0); }
  815.  
  816. /* Pass 2o flags links which have an outgoing arrow */
  817. dpass2o(arry) char arry[KK][KK][KK][KK][KK][KK][KK][KK][KK]; {
  818. int i0, i1, i2, i3, i4, i5, i6, i7, i8, m;
  819. do {
  820. printf(" pass2o\015");
  821. for (i0=0; i0<KK; i0++) {
  822. for (i1=0; i1<KK; i1++) {
  823. for (i2=0; i2<KK; i2++) {
  824. for (i3=0; i3<KK; i3++) {
  825. for (i4=0; i4<KK; i4++) {
  826. for (i5=0; i5<KK; i5++) {
  827. for (i6=0; i6<KK; i6++) {
  828. for (i7=0; i7<KK; i7++) {
  829. for (i8=0; i8<KK; i8++) {
  830. if ((arry[i0][i1][i2][i3][i4][i5][i6][i7][i8]&0x5F)=='Y')
  831.  {for (m=0; m<KK; m++) arry[m][i0][i1][i2][i3][i4][i5][i6][i7]|=0x20;};
  832. };};};};};};};};};
  833. } while (dpass3(arry)!=0); }
  834.  
  835. /* erase flags, mark survivors, count channges */
  836. int dpass3(arry) char arry[KK][KK][KK][KK][KK][KK][KK][KK][KK]; {
  837. int i0, i1, i2, i3, i4, i5, i6, i7, i8, l;
  838. l=0;
  839. printf(" pass3 \015");
  840. for (i0=0; i0<KK; i0++) {
  841. for (i1=0; i1<KK; i1++) {
  842. for (i2=0; i2<KK; i2++) {
  843. for (i3=0; i3<KK; i3++) {
  844. for (i4=0; i4<KK; i4++) {
  845. for (i5=0; i5<KK; i5++) {
  846. for (i6=0; i6<KK; i6++) {
  847. for (i7=0; i7<KK; i7++) {
  848. for (i8=0; i8<KK; i8++) {
  849. switch (arry[i0][i1][i2][i3][i4][i5][i6][i7][i8]) {
  850.     case 'y': arry[i0][i1][i2][i3][i4][i5][i6][i7][i8]='Y'; break;
  851.     case 'Y': arry[i0][i1][i2][i3][i4][i5][i6][i7][i8]='N'; l=1; break;
  852.     case 'n': case 'N': arry[i0][i1][i2][i3][i4][i5][i6][i7][i8]='N'; break;
  853.     default: break; };
  854. };};};};};};};};};
  855. return l; }
  856.  
  857. /* Pass4 - print the loops which remain */
  858. dpass4(arry) char arry[KK][KK][KK][KK][KK][KK][KK][KK][KK]; {
  859. int i0, i1, i2, i3, i4, i5, i6, i7, i8;
  860. int j0, j1, j2, j3, j4, j5, j6, j7, j8;
  861. int k, l, m;
  862. printf(" pass4 \015");
  863. for (i0=0; i0<KK; i0++) {
  864. for (i1=0; i1<KK; i1++) {
  865. for (i2=0; i2<KK; i2++) {
  866. for (i3=0; i3<KK; i3++) {
  867. for (i4=0; i4<KK; i4++) {
  868. for (i5=0; i5<KK; i5++) {
  869. for (i6=0; i6<KK; i6++) {
  870. for (i7=0; i7<KK; i7++) {
  871. for (i8=0; i8<KK; i8++) {
  872. j0=i0; j1=i1; j2=i2; j3=i3; j4=i4; j5=i5; j6=i6; j7=i7; j8=i8;
  873. l=0;
  874. m=0;
  875. do {
  876.         if (arry[0][j1][j2][j3][j4][j5][j6][j7][j8]=='Y')
  877.     {arry[0][j1][j2][j3][j4][j5][j6][j7][j8]='y';
  878.     k=j8; j8=j7; j7=j6; j6=j5; j5=j4; j4=j3; j3=j2; j2=j1; j1=0; m=1;}
  879.   else {if (arry[1][j1][j2][j3][j4][j5][j6][j7][j8]=='Y')
  880.     {arry[1][j1][j2][j3][j4][j5][j6][j7][j8]='y';
  881.     k=j8; j8=j7; j7=j6; j6=j5; j5=j4; j4=j3; j3=j2; j2=j1; j1=1; m=1;}
  882.   else {if (arry[2][j1][j2][j3][j4][j5][j6][j7][j8]=='Y')
  883.     {arry[2][j1][j2][j3][j4][j5][j6][j7][j8]='y';
  884.     k=j8; j8=j7; j7=j6; j6=j5; j5=j4; j4=j3; j3=j2; j2=j1; j1=2; m=1;}
  885.   else {l=1;
  886.     if (m==1) {j0=j1; j1=j2; j2=j3; j3=j4; j4=j5; j5=j6; j6=j7; j7=j8; j8=k;};
  887.     };};};
  888.   } while (l==0);
  889. l=0; 
  890. m=0;
  891. do {
  892.         if (arry[j0][j1][j2][j3][j4][j5][j6][j7][0]=='y')
  893.    {dprf(j0,j1,j2,j3,j4,j5,j6,j7,0);
  894.    arry[j0][j1][j2][j3][j4][j5][j6][j7][0]='N';
  895.    j0=j1; j1=j2; j2=j3; j3=j4; j4=j5; j5=j6; j6=j7; j7=0; m=1;}
  896.   else {if (arry[j0][j1][j2][j3][j4][j5][j6][j7][1]=='y')
  897.    {dprf(j0,j1,j2,j3,j4,j5,j6,j7,1);
  898.    arry[j0][j1][j2][j3][j4][j5][j6][j7][1]='N';
  899.    j0=j1; j1=j2; j2=j3; j3=j4; j4=j5; j5=j6; j6=j7; j7=1; m=1;}
  900.   else {if (arry[j0][j1][j2][j3][j4][j5][j6][j7][2]=='y')
  901.    {dprf(j0,j1,j2,j3,j4,j5,j6,j7,2);
  902.    arry[j0][j1][j2][j3][j4][j5][j6][j7][2]='N';
  903.    j0=j1; j1=j2; j2=j3; j3=j4; j4=j5; j5=j6; j6=j7; j7=2; m=1;}
  904.   else {l=1;};};};
  905.   } while (l==0);
  906. l=0;
  907. do {
  908.         if (arry[j0][j1][j2][j3][j4][j5][j6][j7][0]=='Y')
  909.    {dprf(j0,j1,j2,j3,j4,j5,j6,j7,0);
  910.    arry[j0][j1][j2][j3][j4][j5][j6][j7][0]='N';
  911.    j0=j1; j1=j2; j2=j3; j3=j4; j4=j5; j5=j6; j6=j7; j7=0; m=1;}
  912.   else {if (arry[j0][j1][j2][j3][j4][j5][j6][j7][1]=='Y')
  913.    {dprf(j0,j1,j2,j3,j4,j5,j6,j7,1);
  914.    arry[j0][j1][j2][j3][j4][j5][j6][j7][1]='N';
  915.    j0=j1; j1=j2; j2=j3; j3=j4; j4=j5; j5=j6; j6=j7; j7=1; m=1;}
  916.   else {if (arry[j0][j1][j2][j3][j4][j5][j6][j7][2]=='Y')
  917.    {dprf(j0,j1,j2,j3,j4,j5,j6,j7,2);
  918.    arry[j0][j1][j2][j3][j4][j5][j6][j7][2]='N';
  919.    j0=j1; j1=j2; j2=j3; j3=j4; j4=j5; j5=j6; j6=j7; j7=2; m=1;}
  920.   else {l=1; if (m==1) kwait(0);};};};
  921.   } while (l==0);
  922. };};};};};};};};};
  923. }
  924.  
  925. /* print one of the individual links in a chain */
  926. dprf(i0,i1,i2,i3,i4,i5,i6,i7,i8)
  927. int i0, i1, i2, i3, i4, i5, i6, i7, i8; {
  928. int i, j;
  929. kwait(1);
  930. printf("%1d",i0);
  931. printf("%1d",i1);
  932. printf("%1d",i2);
  933. printf("%1d",i3);
  934. printf("%1d",i4);
  935. printf("%1d",i5);
  936. printf("%1d",i6);
  937. printf("%1d",i7);
  938. printf("-");
  939. printf("%1d",i8);
  940. printf(" ");
  941. i=((((((i0*KK+i1)*KK+i2)*KK+i3)*KK+i4)*KK+i5)*KK+i6)*KK+i7;
  942. j=((((((i1*KK+i2)*KK+i3)*KK+i4)*KK+i5)*KK+i6)*KK+i7)*KK+i8;
  943. lijnk(dd,i,j,3);
  944. }
  945.  
  946. /* end */
  947.